package com.totoro.metrics;

import com.codahale.metrics.ConsoleReporter;
import com.codahale.metrics.Gauge;
import com.codahale.metrics.JmxReporter;
import com.codahale.metrics.MetricRegistry;

import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * Gauges是一个简单的计量，一般用阿里统计瞬时状态的数据信息，比如系统中处于pending状态的job
 * Created by Niki on 2018/8/28 11:44
 */
public class GaugesDemo {
    /**
     * 实例化一个registry，最核心的一个模块，相当于一个应用程序的metrics系统的容器，维护一个Map
     */
    private static final MetricRegistry metrics = new MetricRegistry();

    private static Queue<String> queue = new LinkedBlockingQueue<>();





    public static void main(String[] args) throws InterruptedException {
        // console 输出方式
        OutputUtil.console(metrics);

        // jmx 输出方式
//        OutputUtil.jmx(metrics);


        // 实例化一个Gauge
        Gauge<Integer> gauge = new Gauge<Integer>() {
            @Override
            public Integer getValue() {
                return queue.size();
            }
        };

        // 注册到容器中
        metrics.register(MetricRegistry.name(GaugesDemo.class, "pending-job", "size"), gauge);


        for (int i = 0; i < 20; i++) {
            queue.add("a");
            Thread.sleep(1000);
        }
    }

}
